/**
 * Created by wangkui on 2016/1/26.
 */
var _ = require('lodash'),
    url = require("url"),
    mongoose = require('mongoose'),
    PanoTag = require('./../../models/schema/PanoTagSchema.js');

/**
 * 查询标注点
 * @param req
 * @param res
 */
exports.gettags = function(req,res)
{
    var args=url.parse(req.url,true).query;
    var limit = 100;
    var skip = 0;
    if(args.limit) limit = args.limit;
    if(args.skip) skip = args.skip;

    var where = {panoid: req.params.panoid};
    if(args.sex && args.sex != "")
    {
        _.assign(where,{"userinfo.sex":parseInt(args.sex)});
    }
    if(args.userid && args.userid != "")
    {
        //var usrId = mongoose.Types.ObjectId(args.userid);
        _.assign(where,{"userinfo.userid":args.userid});
    }
    if(args.tagtype && args.tagtype != "")
    {
        where.tagtype = args.tagtype;
    }
    var fields = '';
    if( args.fields){
        fields = args.fields.replace(/\,/g,' ');
    }
    console.log(where);

    PanoTag.count(where,function(err,total){
        if(err) { return handleError(res, err); }
        PanoTag.find(where,fields,function(err,panotags){
            if(err) { return handleError(res, err); }
            var result = {total:total,skip:skip,data:panotags};
            return res.status(200).json(result);
        }).limit(limit).skip(skip);
    });

}

/**
 * 返回随机标注点
 * @param req
 * @param res
 */
exports.getRandomTags = function(req,res)
{
    var args=url.parse(req.url,true).query;
    var where = {panoid: req.params.panoid};
    if(args.sex && args.sex != "")
    {
        where.userinfo.sex = args.sex;
    }

    if(args.tagtype && args.tagtype != "")
    {
        where.tagtype = args.tagtype;
    }
    var fields = '';
    if( args.fields){
        fields = args.fields.replace(/\,/g,' ');
    }

    var count = args.count || 10;
    PanoTag.count(where,function(err,total){
        if(err) { return handleError(res, err); }
        var skip = Math.floor(Math.random() * ( total - count + 1));
        if(total <= count) {skip = 0;}

        PanoTag.find(where,fields,function (err, tags){
            if(err) { return handleError(res, err); }
            return res.status(200).json(tags);
        }).skip(skip).limit(count);
    });
}

/**
 * 根据TagId返回Tag信息
 * @param req
 * @param res
 */
exports.getTagbyId = function(req,res)
{
    PanoTag.findByPanoId(req.params.id, function (err, panotag) {
        if(err) { return handleError(res, err); }
        if(!panotag) { return res.send(404); }
        return res.status(200).json(panotag);
    });
}

/**
 * 创建标注点
 * @param req
 * @param res
 */
exports.createTag = function(req,res)
{
    var panoid = req.params.panoid;
    var panoinfo = req.body;
    panoinfo.panoid = panoid;
    if(panoinfo.tagtype == "UserTag")
    {
        panoinfo.userinfo = JSON.parse(panoinfo.userinfo);
    }
    if(_.has(panoinfo,'attached'))
    {
        panoinfo.attached = JSON.parse(panoinfo.attached);
    }

    PanoTag.create(panoinfo, function(err, pano) {
        if(err) { return handleError(res, err); }
        return res.status(201).json(pano);
    });
}

/**
 * 更新标注点
 * @param req
 * @param res
 */
exports.updateTag = function(req,res)
{
    if(req.body._id) { delete req.body._id; }
    PanoTag.findById(req.params.id, function (err, panotag) {
        if (err) { return handleError(res, err); }
        if(!panotag) { return res.send(404); }
        var updated = _.merge(panotag, req.body);
        updated.save(function (err) {
            if (err) { return handleError(res, err); }
            return res.status(200).json(panotag);
        });
    });
}

/**
 * 删除标注点
 * @param req
 * @param res
 */
exports.deleteTag = function(req,res)
{
    PanoTag.findById(req.params.id, function (err, panotag) {
        if(err) { return handleError(res, err); }
        if(!panotag) { return res.send(404); }
        panotag.remove(function(err) {
            if(err) { return handleError(res, err); }
            return res.status(204);
        });
    });
}

// 错误处理
function handleError(res, err) {
    return res.status(500).json(err);
}